package stateful;

import dao.ProdutoDAO;
import java.util.List;
import javax.annotation.PostConstruct;
import model.Consulta;
import model.Produto;
import javax.ejb.Stateful;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import model.TipoConsulta;

@Stateful 
public class ProdutoControle implements ProdutoControleRemote {
    
    private ProdutoDAO produtoDAO;

    //Esta funcionalidade só pode ser usada em uma EJB
    @PersistenceContext
    private EntityManager em;

    //Precisa deste método para que o EntityManager esteja instanciado antes de
    //ser passado como parâmetro para a classe DAO
    @PostConstruct
    private void init() {
        produtoDAO = new ProdutoDAO(em);
    }

    public boolean incluir(Produto produto) {
        System.out.println("Chamou a rotina de inclusão do servidor ejb");
        return produtoDAO.gravar(produto);
    }
    
    public boolean alterar(Produto produto) {
        System.out.println("Chamou a rotina de alteração do servidor ejb");
        return produtoDAO.atualizar(produto);
    }
    
    public List<Produto> consultar(Consulta consulta) {
        System.out.println("Chamou a rotina de pesquisa do servidor ejb");
        if (consulta.getTipo() == TipoConsulta.TODOS) {
            return produtoDAO.consultar();
        } else if (consulta.getTipo() == TipoConsulta.CODIGO) {
            return produtoDAO.consultarCodigo(consulta.getParametro());
        } else if (consulta.getTipo() == TipoConsulta.DESCRICAO) {
            return produtoDAO.consultarDescricao(consulta.getParametro());
        }
        throw new UnsupportedOperationException("Tipo de pesquisa não suportado!");
    }    
}
